package com.quanxiaoha.weblog.common.domain.mapper;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.quanxiaoha.weblog.common.domain.dos.FavoriteFolderDO;

import java.util.List;
import java.util.Objects;

/**
 * 收藏夹Mapper
 */
public interface FavoriteFolderMapper extends BaseMapper<FavoriteFolderDO> {

    /**
     * 根据用户ID查询收藏夹
     * @param userId 用户ID
     * @return 收藏夹列表
     */
    default List<FavoriteFolderDO> selectByUserId(Long userId) {
        LambdaQueryWrapper<FavoriteFolderDO> wrapper = Wrappers.<FavoriteFolderDO>lambdaQuery()
                .eq(Objects.nonNull(userId), FavoriteFolderDO::getUserId, userId)
                .eq(FavoriteFolderDO::getIsDeleted, false)
                .orderByDesc(FavoriteFolderDO::getIsDefault)
                .orderByDesc(FavoriteFolderDO::getCreateTime);
        return selectList(wrapper);
    }

    /**
     * 根据会话ID查询收藏夹
     * @param sessionId 会话ID
     * @return 收藏夹列表
     */
    default List<FavoriteFolderDO> selectBySessionId(String sessionId) {
        LambdaQueryWrapper<FavoriteFolderDO> wrapper = Wrappers.<FavoriteFolderDO>lambdaQuery()
                .eq(Objects.nonNull(sessionId), FavoriteFolderDO::getSessionId, sessionId)
                .eq(FavoriteFolderDO::getIsDeleted, false)
                .orderByDesc(FavoriteFolderDO::getIsDefault)
                .orderByDesc(FavoriteFolderDO::getCreateTime);
        return selectList(wrapper);
    }

    /**
     * 查询用户的默认收藏夹
     * @param userId 用户ID
     * @param sessionId 会话ID
     * @return 默认收藏夹
     */
    default FavoriteFolderDO selectDefaultFolder(Long userId, String sessionId) {
        LambdaQueryWrapper<FavoriteFolderDO> wrapper = Wrappers.<FavoriteFolderDO>lambdaQuery()
                .eq(Objects.nonNull(userId), FavoriteFolderDO::getUserId, userId)
                .eq(Objects.nonNull(sessionId), FavoriteFolderDO::getSessionId, sessionId)
                .eq(FavoriteFolderDO::getIsDefault, true)
                .eq(FavoriteFolderDO::getIsDeleted, false);
        return selectOne(wrapper);
    }

    /**
     * 检查收藏夹名称是否已存在
     * @param userId 用户ID
     * @param sessionId 会话ID
     * @param name 收藏夹名称
     * @return 是否存在
     */
    default boolean existsByName(Long userId, String sessionId, String name) {
        LambdaQueryWrapper<FavoriteFolderDO> wrapper = Wrappers.<FavoriteFolderDO>lambdaQuery()
                .eq(Objects.nonNull(userId), FavoriteFolderDO::getUserId, userId)
                .eq(Objects.nonNull(sessionId), FavoriteFolderDO::getSessionId, sessionId)
                .eq(FavoriteFolderDO::getName, name)
                .eq(FavoriteFolderDO::getIsDeleted, false);
        return selectCount(wrapper) > 0;
    }
}
